package com.ruoyi.sl.service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.ruoyi.sl.domain.SlRwork;
import com.ruoyi.sl.domain.SlWsProduction;
import com.ruoyi.sl.pojo.SlRworkDateForm;
import org.apache.ibatis.annotations.Param;

/**
 * 报工单Service接口
 * 
 * @author admin
 * @date 2024-06-06
 */
public interface ISlRworkService 
{

    //根据日期取产量
    public List<SlWsProduction> selectProductionByQuery(int year,String strType,Long moduleId,Long workshopId);

    //获报工单ID和参与人获取参与人的所有报工项
    public List<SlRwork> selectSlRworkListByRfworkIdAndMember(Long rfworkId,String memberUser);

    //查询当前报工单下每道工序的生产量
    public List<SlRwork> selectGroupProcessByRfworkId(Long rfworkId);

    //最后一次报工部分数据
    public SlRwork selectSlRworkByLast(String rworkUser,Date rworkDate);

    //根据模块，车间，大工序ID 查询包含这些ID的所有报工单ID
    public List<Long> selectGroupRworkByAnyId(SlRwork slRwork);

    //报工人选过的操作人按次数排序
    public List<String> selectOftenUserList(String rworkUser);

    /**
     * 查询报工单
     * 
     * @param rworkId 报工单主键
     * @return 报工单
     */
    public SlRwork selectSlRworkByRworkId(Long rworkId);

    /**
     * 查询报工单列表
     * 
     * @param slRwork 报工单
     * @return 报工单集合
     */
    public List<SlRwork> selectSlRworkList(SlRwork slRwork);


    /**
     * 根据日期查询当日的报工人列表
     *
     * @param rworkDate 日期
     * @return 报工人集合
     */
    public List<SlRwork> selectSlRworkUserListByDate(Date rworkDate);

    /**
     * 查询指定报工单条件的总金额
     *
     * @param slRwork 报工单条件
     * @return 金额
     */
    public BigDecimal selectTotalAmountByRwork(SlRwork slRwork);


    /**
     * 查询指定报工单下所有报工项的总金额
     *
     * @param rfworkId 报工单ID
     * @return 金额
     */
    public BigDecimal selectAllPayByRfworkId(Long rfworkId);

    /**
     * 所有已通过审核的报工单
     *
     * @return 集合
     */
    public List<SlRwork> selectAllApprovedSlRworkList();

    /**
     * 所有未提交的报工项
     *
     * @return 集合
     */
    public List<SlRwork> selectSlRworkListByNoSubmit(SlRwork slRwork);

    /**
     * 根据报工单ID查询所有报工项
     *
     * @return 集合
     */
    public List<SlRwork> selectSlRworkListByRfworkId(Long rfworkId);


    /**
     * 新增报工单
     * 
     * @param slRwork 报工单
     * @return 结果
     */
    public int insertSlRwork(SlRwork slRwork);

    /**
     * 修改报工单
     * 
     * @param slRwork 报工单
     * @return 结果
     */
    public int updateSlRwork(SlRwork slRwork);

    /**
     * 修改报工单时间
     *
     * @param slRwork 报工单
     * @return 结果
     */
    public int updateSlRworkDateTime(SlRwork slRwork);
    /**
     * 批量删除报工单
     * 
     * @param rworkIds 需要删除的报工单主键集合
     * @return 结果
     */
    public int deleteSlRworkByRworkIds(Long[] rworkIds);

    /**
     * 删除报工单信息
     * 
     * @param rworkId 报工单主键
     * @return 结果
     */
    public int deleteSlRworkByRworkId(Long rworkId);

    /**
     * 将报工单的审核标记改为3，已计算工资
     *
     * @param rworkId 报工单ID
     * @return 结果
     */
    public int updateSlRworkToOver(Long rworkId);


    /**
     * 创建一个报工单关联所有报工项
     *
     * @param slRworkDateForm 报工单
     * @return 结果
     */
    public int insertDateRworks(SlRworkDateForm slRworkDateForm);

}
